package com.xu.base.utils;

import com.xu.base.enums.ResponseCodeEnum;
import com.xu.base.exception.ServiceException;
import org.springframework.util.StringUtils;

import java.util.Collection;

/**
 * 断言工具类
 *
 * @Author: 许乾伟
 * @Date: 2023/12/5  16:30
 */
public class AssertUtils {
    /**
     * 条件为true抛出异常
     * @param flag 条件
     * @param code 错误码
     * @param message 消息
     */
    public static void isTrue(Boolean flag, ResponseCodeEnum code, String message) {
        if (flag) {
            throw new ServiceException(code, message);
        }
    }

    /**
     * 条件为true抛出异常
     * @param flag 条件
     * @param code 错误码
     */
    public static void isTrue(Boolean flag, ResponseCodeEnum code) {
        isTrue(flag, code, null);
    }
    /**
     * 条件为false抛出异常
     * @param flag 条件
     * @param code 错误码
     * @param message 消息
     */
    public static void isFalse(Boolean flag, ResponseCodeEnum code, String message) {
        if (!flag) {
            throw new ServiceException(code, message);
        }
    }
    /**
     * 条件为false抛出异常
     * @param flag 条件
     * @param code 错误码
     */
    public static void isFalse(Boolean flag, ResponseCodeEnum code) {
        isFalse(flag, code, null);
    }
    /**
     * 对象为null抛出异常
     * @param object 对象
     * @param code 错误码
     * @param message 消息
     */
    public static void isNull(Object object, ResponseCodeEnum code, String message) {
        if (null == object) {
            throw new ServiceException(code, message);
        }
    }
    /**
     * 对象为null抛出异常
     * @param object 对象
     * @param code 错误码
     */
    public static void isNull(Object object, ResponseCodeEnum code) {
        isNull(object, code, null);
    }
    /**
     * 对象非null抛出异常
     * @param object 对象
     * @param code 错误码
     * @param message 消息
     */
    public static void notNull(Object object, ResponseCodeEnum code, String message) {
        if (null != object) {
            throw new ServiceException(code, message);
        }
    }
    /**
     * 对象非null抛出异常
     * @param object 对象
     * @param code 错误码
     */
    public static void notNull(Object object, ResponseCodeEnum code) {
        notNull(object, code, "");
    }
    /**
     * 字符串为空抛出异常
     * @param object 对象
     * @param code 错误码
     * @param message 消息
     */
    public static void hasText(String object, ResponseCodeEnum code, String message){
        if (!StringUtils.hasText(object)){
            throw new ServiceException(code, message);
        }
    }
    /**
     * 字符串为空抛出异常
     * @param object 对象
     * @param code 错误码
     */
    public static void hasText(String object, ResponseCodeEnum code){
        hasText(object,code,null);
    }

    /**
     * 集合为空抛出异常
     * @param collection 集合
     * @param code 错误码
     * @param message 异常消息
     */
    public static void isEmpty(Collection<?> collection, ResponseCodeEnum code, String message) {
        if (collection == null || collection.isEmpty()) {
            throw new ServiceException(code, message);
        }
    }
    /**
     * 集合为空抛出异常
     * @param collection 集合
     * @param code 错误码
     */
    public static void isEmpty(Collection<?> collection, ResponseCodeEnum code) {
        isEmpty(collection, code, null);
    }
    /**
     * 集合非空抛出异常
     * @param collection 集合
     * @param code 错误码
     * @param message 异常消息
     */
    public static void isNotEmpty(Collection<?> collection, ResponseCodeEnum code, String message) {
        if (collection != null && !collection.isEmpty()) {
            throw new ServiceException(code, message);
        }
    }
    /**
     * 集合非空抛出异常
     * @param collection 集合
     * @param code 错误码
     */
    public static void isNotEmpty(Collection<?> collection, ResponseCodeEnum code) {
        isNotEmpty(collection, code, null);
    }
}
